//
//  JUtil.h
//  jhf
//
//  Created by 计海峰 on 2017/11/23 14:05:37.
//  Copyright © 2017年 计海峰. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface JUtil : NSObject


#pragma mark pop多层 num:1表示正常pop一层  toNum:跳转到第几个(优先)
/**
 跳回几层Controller
 
 @param num 跳回数量
 @param toNum  跳转到第几个(优先)
 @param vc 原始vc
 */
+ (void)popNumController:(NSInteger)num orToNumController:(NSInteger)toNum andVC:(UIViewController *)vc;

#pragma mark 查看短信等时间
/**
 查看短信剩余时间
 
 @param isCircle 是否循环输出
 @param block 回调
 */
+ (void)messageTimeCirle:(BOOL)isCircle andblock:(void (^)(NSInteger))block;

#pragma mark 去掉nav中的几个
/**
 去掉nav的controllers中的几个
 
 @param dataArray 需要去掉的UIViewController 名字
 @param nav 需要controllers的vc
 */
+ (void)reSetNavigaitonController:(NSMutableArray <NSString *>*)dataArray andViewController:(UINavigationController *)nav;

#pragma mark 去掉nav中的几个 忽略第一个
/**
 去掉nav的controllers中的几个 忽略第一个
 
 @param dataArray 需要去掉的UIViewController 名字
 @param nav 需要controllers的vc
 */
+ (void)reSetNavAndIgnoreFirst:(NSMutableArray *)dataArray andViewController:(UINavigationController *)nav;


#pragma mark 签名


/**
 一次签名
 
 @param param 参数
 @param urlStr url
 @return 密文
 */
+ (NSString *)signCode:(NSMutableDictionary *)param andUrl:(NSString *)urlStr;

/**
 二次签名
 
 @param param 参数
 @param urlStr url
 @param crc 加密次数
 @return 密文
 */
+ (NSString *)reSignCode:(NSMutableDictionary *)param andUrl:(NSString *)urlStr andNum:(int)crc;



#pragma mark 获取bundle资源

/**
 获取bundle资源中的一个文件
 
 @param bundleName 资源名
 @param filename 文件名
 @return 路径
 */
NSString *getBundlePath(NSString *bundleName ,NSString *filename);

#pragma mark 清除所有缓存信息

/**
 删除所有的本地NSUserDefaults
 */
+ (void)resetDefaults;


/**
 忽略几个key 删除所有的本地NSUserDefaults
 
 @param ignoreNames 忽略名字NString
 */
+ (void)resetDefaults:(NSArray<NSString *>*)ignoreNames;

#pragma mark 把参数放到URL尾部

/**
 url + params 拼接成整体 连接 可以做get请求
 
 @param url url
 @param params params
 @return 拼接后字符串
 */
NSString* queryStringToUrl(NSString *url , NSDictionary * params);



#pragma mark 圈上一点 位置信息
/**
 *  圈上一点 位置信息
 *
 *  @param center 圆圈在IOS视图中的中心坐标，即该圆视图的center属性
 *  @param angle  角度值，是0～360之间的值
 *  @param radius 圆周半径
 *
 *  @return 获取 圈上的一个地点的坐标
 */
+ (CGPoint)calcCircleCoordinateWithCenter:(CGPoint) center  andWithAngle:(CGFloat)angle andWithRadius:(CGFloat) radius;
#pragma mark 获取经纬度之间的距离

/**
 两个经纬度之前的距离
 
 @param orig 原始地点经纬度
 @param dis 另外一个地点 经纬度
 @return 长度
 */
+ (CLLocationDistance )getDistance:(CLLocation *)orig andLocation:(CLLocation *)dis;

#pragma mark 标准化距离
/**
 *  标准化距离
 *
 *  @param distance 实际距离 单位米
 *
 *  @return 标准字符串
 */
+ (NSString *)formatDistance:(float)distance;


/**
 格式化大小
 
 @param biteSize 原始size大小(单位:B)
 @return 标准后字符串
 */
+ (NSString *)formatSize:(NSUInteger)biteSize;



#pragma mark 获取一个随机整数，范围在[from,to），包括from，不包括to
/**
 
 获取一个随机整数 范围在[from,to）
 
 @param from 包括from
 @param to 不包括to
 @return int
 */
+ (int)getRandomNumber:(int)from to:(int)to;

#pragma mark 获取MD5小写
/**
 md5加密
 
 @param inPutText 加密的字符串
 @return 加密后文字
 */
+ (NSString *)md5:(NSString *)inPutText;


#pragma mark 返回文件夹路径 没有则创建

/**
 返回文件夹路径 没有则创建
 
 @param dir 文件名
 @return 沙盒路径+文件名
 */
NSString* getDirectoryForDocuments(NSString* dir);

#pragma mark 获取沙盒位置
/**
 获取沙盒位置
 
 @return 沙盒路径
 */
NSString *getDocumentPath();

#pragma mark 文件是否存在
/**
 *  文件是否存在
 *
 *  @param filepath 文件是否存在
 *
 *  @return 是否存在
 */
BOOL isFileExists(NSString* filepath);

#pragma mark 删除文件
/**
 *  删除文件
 *
 *  @param filepath 需要删除的文件
 *
 *  @return 是否成功
 */
BOOL deleteWithFilepath(NSString* filepath);

#pragma mark json转NSDictory
/**
 把格式化的JSON格式的字符串转换成字典
 
 @param json JSON格式的字符串
 @return 返回字典
 */
+ (NSDictionary *)jsonToDic:(NSString *)json;

#pragma mark json转NSArray
/**
 json字符串转为数组
 
 @param jsonStr jsonStr
 @return NSArray
 */
+ (NSArray *)jsonToArray:(NSString *)jsonStr;

#pragma mark 字典或者其他转为json
/**
 obj转string
 
 @param object dic
 @return 字符串
 */
+ (NSString*)dataTojson:(id)object;

#pragma mark josn转成array
/**
 json转array
 
 @param source 数组转成的json
 @param modelName model的名字
 @return result
 */
+ (NSArray *)convertSourceToArray:(id)source withModelName:(NSString *)modelName;

#pragma mark 检查文本框是否为空 为空则返回空的 TextField
/**
 检查view上面的textField是否为空
 
 @param view view
 @return 为空的textField
 */
+ (UITextField *)checkTextField:(UIView *)view;

#pragma mark 从url获取参数
/**
 从get请求的url分割出某一个参数的值
 
 @param url get请求的url
 @param param 需要value的key
 @return value
 */
+ (NSString *)paramValueOfUrl:(NSString *) url withParam:(NSString *) param;

#pragma mark 缩小图片
/**
 缩小图片
 
 @param image 原始图片
 @param asize 缩小后的size
 @return 缩小后图片
 */
+ (UIImage *)scaleImage:(UIImage *)image size:(CGSize)asize;

#pragma mark 颜色转换为图片

/**
 颜色转换为图片
 
 @param color 颜色对象
 @return 颜色图片
 */
+ (UIImage*)createImageWithColor:(UIColor*)color;

#pragma mark 绘制虚线

/**
 绘制虚线
 
 @param lineView 需要绘制的view
 @param lineLength 虚线长度
 @param lineSpacing 两点的间隔
 @param lineColor 颜色
 */
+ (void)drawDashLine:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor;

#pragma mark 截取当前屏幕
/**
 *  截取当前屏幕
 *
 *  @return NSData 当前截图的data
 */
+ (NSData *)dataWithScreenshotInPNGFormat;

#pragma mark 返回截取到的图片

/**
 *  返回截屏的图片
 *
 *  @return 截屏到的图片
 */
+ (UIImage *)imageWithScreenshot;

#pragma mark 根据url 生成二维码

/**
 根据字符串生成二维码
 
 @param str 字符串
 @param size 二维码大小
 @return 返回的图片
 */
+ (UIImage *)qrCodeWithStr:(NSString *)str andSize:(CGFloat)size;


#pragma mark 根据CIImage生成指定大小的UIImage
/**
 *  根据CIImage生成指定大小的UIImage
 *
 *  @param image CIImage
 *  @param size  图片宽度
 */
+ (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size;

#pragma mark 手机号码隐藏中间数字

/**
 手机号码隐藏中间数字
 
 @param string 手机号码
 @return 返回隐藏后的手机号
 */
+ (NSString*)hiddenMiddleNum:(NSString *)string;


#pragma mark 通过view获取父controller
/**
 通过view获取父controller
 
 @param sourceView view
 @return 父级controller
 */
+ (UIViewController *)findViewController:(UIView *)sourceView;

#pragma mark 获取navbar数据
/**
 初始化navbar的item
 
 @param imagesArray 图片的文本
 @param target 点击后反馈
 @param action 执行方法
 @return UIBarButtonItems
 */
+ (NSMutableArray <UIBarButtonItem *> *)barItemWithArray:(NSArray <NSString *> *)imagesArray
                                                  target:(id)target
                                                  action:(SEL)action;

/**
 初始化navbar的item
 
 @param imagesArray 图片的文本
 @param placeholderImageName 本地默认图片
 @param target 点击后反馈
 @param action 执行方法
 @return UIBarButtonItems
 */
+ (NSMutableArray <UIBarButtonItem *> *)barUserItemsWithArray:(NSArray <NSString *> *)imagesArray
                                         placeholderImageName:(NSString *)placeholderImageName
                                                       target:(id)target
                                                       action:(SEL)action;

@end
